Python 中 您所在的位置:网站首页 python __init__和__new__的区别 Python 中

Python 中

2024-04-19 13:50| 来源: 网络整理| 查看: 265

__new__ 是实例对象真正的创建函数,在实例对象创建之前被调用,用于创建实例并返回该实例对象 __init__ 是实例对象的初始化函数,在实例对象创建完成后被调用,用于设置实例对象的初始化属性 区别 __new__ __init__ 类型 静态方法,但不用使用 @staticmethod 装饰器显示声明 实例方法 参数 至少包含 cls,代表当前类 至少包含 self,代表当前实例 返回值 返回对象的实例 禁止返回任何值 调用顺序 在对象创建前调用 对象创建后初始化过程中调用

说明

如果 __new__ 创建的是当前类的实例,会自动调用_ __init__ 函数进行初始化,否则后面的 __init__ 函数不会被调用 12345678910class A(object): def __new__(cls, *args, **kwargs): print('__new__ method in class A') return super(A, cls).__new__(cls) def __init__(self, name): print('__init__ method in class A') self.name = namea = A("name")

牛客网上有关区别的一道题:

1234567__new__和__init__的区别,说法正确的是? ABCDA. __new__ 是一个静态方法,而 __init__ 是一个实例方法B. __new__ 方法会返回一个创建的实例,而 __init__ 什么都不返回C. 只有在 __new__ 返回一个 cls 的实例时,后面的 __init__ 才能被调用D. 当创建一个新实例时调用 __new__,初始化一个实例时用 __init__` 使用自定义 __new__ 函数对不可变类型(int, str, tuple)进行修改1234567class AbsoluteValue(int): # 对 __new__ 函数进行重写,以 abs(value) 创建其实例 def __new__(cls, value): return super(AbsoluteValue, cls).__new__(cls, abs(value))abv = AbsoluteValue(-1)print(abv) 使用自定义 __new__ 函数实现单例模式123456789101112131415161718class Person(object): def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return "name: %s, age: %s" % (self.name, self.age) def __new__(cls, *args, **kwargs): if not hasattr(cls, 'instance'): cls.instance = super(Person, cls).__new__(cls) return cls.instancep1 = Person('p1', 20)p2 = Person('p2', 10)print(p1, p2)print(p1 is p2) # True


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有